# Copyright © 2017-2019 Intel Corporation
# SPDX-License-Identifier: MIT

option(
  'split-debug',
  type : 'feature',
  value : 'disabled',
  description : 'split debug information (-gsplit-dwarf compile flag) and debug information in the gdb index format (--gdb-index)',
)
option(
  'platforms',
  type : 'array',
  value : ['auto'],
  choices : [
    'auto', 'x11', 'wayland', 'haiku', 'android', 'windows', 'macos', 'ohos',
  ],
  description : 'window systems to support. If this is set to `auto`, all ' +
                'platforms applicable will be enabled.'
)

option(
  'egl-native-platform',
  type : 'combo',
  value : 'auto',
  choices : [
    'auto', 'x11', 'wayland', 'haiku', 'android', 'windows', 'ohos',
    'surfaceless', 'drm',
  ],
  description : 'the window system EGL assumes for EGL_DEFAULT_DISPLAY',
)

option(
  'android-stub',
  type : 'boolean',
  value : false,
  description : 'Build against android-stub',
)

option(
  'android-strict',
  type : 'boolean',
  value : true,
  description : 'Enable strict Android compliance. Disabling may cause CTS ' +
                'failures or other problems, but allows drivers to expose ' +
                'capabilities that are normally hidden. Default: true'
)

option(
  'android-libbacktrace',
  type : 'feature',
  description : 'Use Android\'s libbacktrace',
)

option(
  'dri-drivers-path',
  type : 'string',
  value : '',
  description : 'Location to install dri drivers. Default: $libdir/dri.'
)

option(
  'unversion-libgallium',
  type : 'boolean',
  value : false,
  description : 'Do not include mesa version in libgallium DSO filename. ' +
                'Do not enable unless you know what you are doing. Default: false'
)

option(
  'expat',
  type : 'feature',
  value : 'auto',
  description : 'Controls the use of expat. ' +
                'Cannot be disabled if xmlconfig is enabled.'
)

option(
  'gallium-drivers',
  type : 'array',
  value : ['auto'],
  choices : [
    'auto', 'radeonsi', 'r300', 'r600', 'nouveau', 'freedreno',
    'swrast', 'v3d', 'vc4', 'etnaviv', 'tegra', 'i915', 'svga', 'virgl',
    'panfrost', 'iris', 'lima', 'zink', 'd3d12', 'asahi', 'crocus', 'all',
    'softpipe', 'llvmpipe',
  ],
  description : 'List of gallium drivers to build. If this is set to auto ' +
                'all drivers applicable to the target OS/architecture ' +
                'will be built.'
)

option(
  'gallium-extra-hud',
  type : 'boolean',
  value : false,
  description : 'Enable HUD block/NIC I/O HUD status support',
)

option(
  'gallium-vdpau',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'enable gallium vdpau frontend.',
)

option(
  'vdpau-libs-path',
  type : 'string',
  value : '',
  description : 'path to put vdpau libraries. defaults to $libdir/vdpau.'
)

option(
  'gallium-va',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'enable gallium va frontend.',
)

option(
  'va-libs-path',
  type : 'string',
  value : '',
  description : 'path to put va libraries. defaults to $libdir/dri.'
)

option(
  'gallium-xa',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'enable gallium xa frontend.',
)

option(
  'gallium-nine',
  type : 'boolean',
  value : false,
  description : 'build gallium "nine" Direct3D 9.x frontend.',
)

option(
  'gallium-d3d10umd',
  type : 'boolean',
  value : false,
  description : 'build gallium D3D10 WDDM UMD frontend.',
)

option(
  'gallium-opencl',
  type : 'combo',
  choices : ['icd', 'standalone', 'disabled'],
  value : 'disabled',
  description : 'build gallium "clover" OpenCL frontend.',
)

option(
  'gallium-rusticl',
  type : 'boolean',
  value : false,
  description : 'build gallium "rusticl" OpenCL frontend.',
)

option(
  'gallium-rusticl-enable-drivers',
  type : 'array',
  value : ['auto', 'asahi'],
  description : 'List of gallium drivers for which rusticl will be enabled ' +
                'by default',
)

option(
  'gallium-wgl-dll-name',
  type : 'string',
  value : 'libgallium_wgl',
  description : 'name of gallium wgl target DLL built for Windows. ' +
                'defaults to libgallium_wgl.dll to match DRI',
)

option(
  'gallium-d3d10-dll-name',
  type : 'string',
  value : 'libgallium_d3d10',
  description : 'name of gallium d3d10 target DLL built for Windows. ' +
                'defaults to libgallium_d3d10.dll to match DRI',
)

option(
  'static-libclc',
  type : 'array',
  value : [],
  choices : ['spirv', 'spirv64', 'all'],
  description : 'Link libclc SPIR-V statically.',
)

option(
  'd3d-drivers-path',
  type : 'string',
  value : '',
  description : 'Location of D3D drivers. Default: $libdir/d3d',
)

option(
  'vulkan-drivers',
  type : 'array',
  value : ['auto'],
  choices : ['auto', 'amd', 'broadcom', 'freedreno', 'intel', 'intel_hasvk',
             'panfrost', 'swrast', 'virtio', 'imagination-experimental',
             'microsoft-experimental', 'nouveau', 'asahi', 'gfxstream',
             'all'],
  description : 'List of vulkan drivers to build. If this is set to auto ' +
                'all drivers applicable to the target OS/architecture ' +
                'will be built'
)

# Note that currently turnip supports msm and kgsl, while the gallium driver
# support msm and virtio.  This is a temporary situation with virtio support
# for turnip and kgsl support for gallium planned/in-progress.
option(
  'freedreno-kmds',
  type : 'array',
  value : ['msm'],
  choices : ['msm', 'kgsl', 'virtio', 'wsl'],
  description : 'List of kernel-mode drivers to enable for freedreno ' +
                'gallium and vulkan driver',
)

option(
  'amdgpu-virtio',
  type : 'boolean',
  value : false,
  description : 'use experimental virtio backend for radeonsi/radv',
)
option(
  'imagination-srv',
  type : 'boolean',
  value : false,
  description : 'Enable Services backend for Imagination Technologies ' +
                'vulkan driver',
)

option(
  'shader-cache',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build with on-disk shader cache support.',
)

option(
  'shader-cache-default',
  type : 'boolean',
  value : true,
  description : 'If set to false, the feature is only activated when ' +
                'environment variable MESA_SHADER_CACHE_DISABLE is set ' +
                'to false',
)

option(
  'shader-cache-max-size',
  type : 'string',
  value : '',
  description : 'Default value for MESA_SHADER_CACHE_MAX_SIZE enviroment ' +
                'variable. If set, determines the maximum size of the ' +
                'on-disk cache of compiled shader programs, can be overriden ' +
                'by enviroment variable if needed. Should be set to a number ' +
                'optionally followed by ``K``, ``M``, or ``G`` to specify ' +
                'a size in kilobytes, megabytes, or gigabytes. By default, ' +
                'gigabytes will be assumed. And if unset, a maximum size of ' +
                '1GB will be used.'
)

option(
  'vulkan-icd-dir',
  type : 'string',
  value : '',
  description : 'Location relative to prefix to put vulkan icds on install. ' +
                'Default: $datadir/vulkan/icd.d'
)

option(
  'moltenvk-dir',
  type : 'string',
  value : '',
  description : 'Location of the MoltenVk SDK. Default: '
)

option(
  'vulkan-layers',
  type : 'array',
  value : [],
  choices : [
    'device-select', 'intel-nullhw', 'overlay', 'screenshot', 
    'vram-report-limit',
  ],
  description : 'List of vulkan layers to build'
)

option(
  'shared-glapi',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Whether to build a shared or static glapi. Defaults to ' +
                'disabled on Windows, enabled elsewhere'
)

option(
  'gles1',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build support for OpenGL ES 1.x'
)

option(
  'gles2',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build support for OpenGL ES 2.x and 3.x'
)

option(
  'opengl',
  type : 'boolean',
  value : true,
  description : 'Build support for desktop OpenGL'
)

option(
  'gbm',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build support for gbm platform'
)

option(
  'gbm-backends-path',
  type : 'string',
  value : '',
  description : 'Locations to search for gbm backends, passed as colon ' +
                'separated list. Default: $libdir/gbm.'
)

option(
  'glx',
  type : 'combo',
  value : 'auto',
  choices : ['auto', 'disabled', 'dri', 'xlib'],
  description : 'Build support for GLX platform'
)

option(
  'egl',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build support for EGL platform'
)

option(
  'glvnd',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Enable GLVND support.'
)

option(
  'microsoft-clc',
  type : 'feature',
  value : 'auto',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build support for the Microsoft CLC to DXIL compiler'
)

option(
  'spirv-to-dxil',
  type : 'boolean',
  value : false,
  description : 'Build support for the SPIR-V to DXIL library'
)

option(
  'glvnd-vendor-name',
  type : 'string',
  value : 'mesa',
  description : 'Vendor name string to use for glvnd libraries'
)

option(
   'glx-read-only-text',
   type : 'boolean',
   value : false,
   description : 'Disable writable .text section on x86 (decreases performance)'
)

option(
  'llvm',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build with LLVM support.'
)

option(
  'shared-llvm',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Whether to link LLVM shared or statically.'
)

option(
  'draw-use-llvm',
  type : 'boolean',
  value : true,
  description : 'Whether to use LLVM for the Gallium draw module, if LLVM ' +
                'is included.'
)

option(
  'amd-use-llvm',
  type : 'boolean',
  value : true,
  description : 'Whether to use LLVM for the AMD drivers, if LLVM ' +
                'is included.'
)

option (
  'llvm-orcjit',
  type : 'boolean',
  value : false,
  description: 'Build llvmpipe with LLVM ORCJIT support. Has no effect when ' +
               'building for architectures without LLVM MCJIT support -- ' +
               'ORCJIT is the only choice on such architectures and will ' +
               'always be enabled.'
)

option(
  'valgrind',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build with valgrind support'
)

option(
  'libunwind',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Use libunwind for stack-traces'
)

option(
  'lmsensors',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Enable HUD lmsensors support.'
)

option(
  'build-tests',
  type : 'boolean',
  value : false,
  description : 'Build unit tests. Currently this will build *all* unit ' +
                'tests except the ACO tests, which may build more than expected.'
)

option(
  'enable-glcpp-tests',
  type : 'boolean',
  value : true,
  description : 'Build glcpp unit tests. These are flaky on CI.'
)

option(
  'build-aco-tests',
  type : 'boolean',
  value : false,
  description : 'Build ACO tests. These require RADV and glslang but not ' +
                'an AMD GPU.'
)

option(
  'install-intel-gpu-tests',
  type : 'boolean',
  value : false,
  description : 'Build and install Intel unit tests which require the GPU. ' +
                'This option is for developers and the Intel CI system only.'
)

option(
  'html-docs',
  type : 'feature',
  value : 'disabled',
  description : 'Build HTML documentation.'
)

option(
  'html-docs-path',
  type : 'string',
  value : '',
  description : 'Location to install HTML documentation. Default: $datadir/doc/mesa.'
)

option(
  'selinux',
  type : 'boolean',
  deprecated : true,
  description : 'Does nothing, left here for a while to avoid build breakages.',
)

option(
  'execmem',
  type : 'boolean',
  deprecated : true,
  description : 'Does nothing, left here for a while to avoid build breakages.',
)

option(
  'osmesa',
  type : 'boolean',
  value : false,
  description : 'Build OSmesa.'
)

option(
  'tools',
  type : 'array',
  value : [],
  choices : ['drm-shim', 'etnaviv', 'freedreno', 'glsl', 'intel', 'intel-ui',
             'nir', 'nouveau', 'lima', 'panfrost', 'asahi', 'imagination',
             'all', 'dlclose-skip'],
  description : 'List of tools to build. (Note: `intel-ui` selects `intel`)',
)

option(
  'power8',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Enable power8 optimizations.',
)

option(
  'xlib-lease',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Enable VK_EXT_acquire_xlib_display.'
)

option(
  'glx-direct',
  type : 'boolean',
  value : true,
  description : 'Enable direct rendering in GLX and EGL for DRI',
)

option('egl-lib-suffix',
  type : 'string',
  value : '',
  description : 'Suffix to append to EGL library name.  Default: none.'
)

option(
  'gles-lib-suffix',
  type : 'string',
  value : '',
  description : 'Suffix to append to GLES library names.  Default: none.'
)

option(
  'platform-sdk-version',
  type : 'integer',
  min : 25,
  max : 10000,
  value : 25,
  description : 'Android Platform SDK version. Default: Nougat version.'
)

option(
   'allow-kcmp',
   type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
   description : 'Allow using KCMP_FILE to compare file descriptions. ' +
                 'auto = allowed everywhere except on Android'
)

option(
  'zstd',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Use ZSTD instead of ZLIB in some cases.'
)

option(
   'zlib',
   type : 'feature',
   deprecated: {'true': 'enabled', 'false': 'disabled'},
   value : 'enabled',
   description : 'Use ZLIB to build driver. Default: enabled'
)

option(
  'sse2',
  type : 'boolean',
  value : true,
  description : 'use msse2 flag for x86. Uses sse/sse2 instead of x87. Default: true',
)

option(
  'perfetto',
  type : 'boolean',
  value : false,
  description : 'Enable performance analysis with Perfetto. Default: false'
)

option(
  'datasources',
  type : 'array',
  value : ['auto'],
  choices : ['auto', 'panfrost', 'intel', 'freedreno'],
  description : 'List of Perfetto datasources to build. If this is set to ' +
                '`auto`, datasources that can not be build are skipped. ' +
                'Default: [`auto`]'
)

option(
  'teflon',
  type : 'boolean',
  value : false,
  description : 'Enable TensorFlow Lite delegate. Default: false'
)

option(
  'gpuvis',
  type : 'boolean',
  value : false,
  description : 'Enable tracing markers for gpuvis. Default: false'
)

option(
  'custom-shader-replacement',
  type : 'string',
  value : '',
  description : 'Enable a custom shader replacement mechanism. Note that ' +
                'enabling this option requires adding/generating a ' +
                'shader_replacement.h file that can be included (see ' +
                'shaderapi.c).'
)

option(
  'vmware-mks-stats',
  type : 'boolean',
  value : false,
  description : 'Build gallium VMware/svga driver with mksGuestStats ' +
                'instrumentation.'
)

option(
  'vulkan-beta',
  type : 'boolean',
  value : false,
  description : 'Build vulkan drivers with BETA extensions enabled.'
)

option(
  'intel-clc',
  type : 'combo',
  deprecated: {'true': 'enabled'},
  value : 'auto',
  choices : [
    'enabled', 'system', 'auto'
  ],
  description : 'Build the intel-clc compiler or use a system version.'
)

option(
  'intel-bvh-grl',
  type : 'boolean',
  value : false,
  description : 'Build the BVH structure using GRL.'
)

option(
  'install-intel-clc',
  type : 'boolean',
  value : false,
  description : 'Install the intel-clc compiler (if needed for cross builds).'
)

option(
  'intel-rt',
  type : 'feature',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build Ray Tracing on supported hardware.'
)

option(
  'intel-elk',
  type : 'boolean',
  value : true,
  description : 'Build ELK compiler (used for Gfx8 and earlier). ' +
                'This is required for Crocus and Hasvk, and it is ' +
                'optional for Iris and various developer tools.'
)

option(
  'video-codecs',
  type : 'array',
  value : ['all_free'],
  choices: [
    'all', 'all_free', 'vc1dec', 'h264dec', 'h264enc', 'h265dec', 'h265enc', 'av1dec', 'av1enc', 'vp9dec'
  ],
  description : 'List of codecs to build support for. ' +
                'Distros might want to consult their legal department before ' +
                'enabling these. This is used for all video APIs (vaapi, ' +
                'vdpau, vulkan). Non-patent encumbered codecs will be ' +
                'enabled by default with the all_free default value.'
)

option(
  'gallium-d3d12-video',
  type : 'feature',
  value : 'auto',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'build gallium d3d12 with video support.',
)

option(
  'gallium-d3d12-graphics',
  type : 'feature',
  value : 'auto',
  description : 'build gallium d3d12 with graphics pipeline support.',
)

option(
  'radv-build-id',
  type : 'string',
  value : '',
  description : 'Override build id for shader cache keys (hex string). ' +
                'Can be extracted with readelf -x .note.gnu.build-id'
)

option(
  'min-windows-version',
  type : 'integer',
  min : 7,
  max : 11,
  value : 8,
  description : 'Minimum Windows version to support. Defaults to Windows 8.'
)

option(
  'xmlconfig',
  type : 'feature',
  value : 'auto',
  deprecated: {'true': 'enabled', 'false': 'disabled'},
  description : 'Build custom xmlconfig (driconf) support. If disabled, ' +
                'the default driconf file is hardcoded into Mesa. ' +
                'Requires expat.'
)

option(
  'legacy-x11',
  type : 'array',
  value : ['none'],
  description : 'Build legacy X11 support features.',
  choices : [
    'none', 'dri2'
  ],
)

option(
  'mesa-clc',
  type : 'combo',
  value : 'auto',
  choices : [
    'enabled', 'system', 'auto'
  ],
  description : 'Build the mesa-clc compiler or use a system version.'
)

option(
  'install-mesa-clc',
  type : 'boolean',
  value : false,
  description : 'Install the mesa-clc compiler (if needed for cross builds).'
)

option(
  'precomp-compiler',
  type : 'combo',
  value : 'auto',
  choices : [
    'enabled', 'system', 'auto'
  ],
  description : 'Build drivers internal shader compilers or use a system version'
)

option(
  'install-precomp-compiler',
  type : 'boolean',
  value : false,
  description : 'Install the drivers internal shader compilers (if needed for cross builds).'
)
